package com.springboot.mybatis.service.rabbitmq;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @author sunyt31481
 * @date 2020/8/12 14:41
 * @description 两个消费者同时处理一个消息队列，是均分消息数据的
 */
public class Customer1WorkDemo {
    public static void main(String[] args) throws IOException, TimeoutException {
        Connection connect = RabbitMqUtil.getConnect();
        Channel channel = connect.createChannel();
        channel.basicQos(1);//一次只能消费一条消息，防止数据丢失
        channel.queueDeclare("helloWork", true, false, false,null);
        //参数2：自动确认？  一般情况下是设置为“false”，
        // 因为如果设置为“true”，就会自动确认已经处理信息，如果一次收到5个信息处理，但是在第3个的时候系统宕机，就会导致消息丢失
        //所以应该设置为“false”
        channel.basicConsume("helloWork", false, new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println(new String(body));
                //对拿到并处理的消息进行手动确认。
                // 参数1：需要确认的那条信息  参数2 ：是否开启多个消息同时确认
                channel.basicAck(envelope.getDeliveryTag(), false);
            }
        });
    }
}
